#ifndef __STM32F411_TASK_KEY_H
#define __STM32F411_TASK_KEY_H

#include "stm32f4xx.h"
#include "queue.h"

//key状态，这里把key作为一种输入设备，led作为一种输出设备
//key状态枚举可以认为按键输入，key结果枚举可以认为是按键输出
//led作为一种输出设备，所以只有其中的一种，led状态枚举
typedef enum
{
    KEY_NULL,
    KEY_PRESS,
    KEY_RELEASE,
} key_state_t;

//key结果
typedef enum{
    KEY_NO_PRESS,
    KEY_SHORT_PRESS,
    KEY_LONG_PRESS,
    KEY_DOUBLE_PRESS,
}key_result_t;

//key事件，主要用于封装成一个消息发送到队列里面
typedef struct 
{
    uint32_t triggle_tick;
    key_state_t state;
}key_event_t;

struct KeyInterface{
    void (*pfinit)(void);
    void (*pftask)(void);
};

extern struct KeyInterface key_interface;

extern QueueHandle_t g_key_result_queue;

#endif
